以前做过的一些东西的简单回顾,避免面试官问起来都忘了,也能在简历上面写得更加得心应手
python web.py 网站
接入新浪微博SDK,通过向新浪微博提供的接口(网址)发送GET请求(包含uid和code)得到json格式的返回数据
通过新浪SDK获取需要的信息的步骤
- 用户登陆我的网站,点击新浪微博登陆,调到新浪的登陆页面,其中附带有GET的参数 redirect_uri ,用于下一步跳回我的网站
- 登陆成功返回我的网站,同时带有GET参数code…
- 我用code通过POST方法向新浪申请token,新浪返回一个json格式的数据,里面有token
基本上面三个总结成一句话,我通过和新浪协商好的token向新浪指定的接口(网站)请求我想要的信息
实际上,向新浪微博API请求微博等服务的时候只有access_token这一个参数是必须的,并不需要用户名等其他参数
每次都让用户登录一下执行上面的步骤太麻烦,所以必须把token存起来,每次要用的时候直接通过token向接口请求就好了,token使用cookie保存,存在用户端,是我加密好了的值,我在数据库存另存一份用于比对,用户每次登录我就向用户的浏览器请求token(web.cookies().get()),解密之后得到里面的用户id和存好的token就可以向客户端请求了.
有了上面这些基础知识,就可以详细的理解整个网站的处理流程了
- 用户访问VCool主页,由index这个类的GET()方法处理,首先向浏览器请求cookie,如果得到了cookie,直接跳到第3步,没有cookie,执行第2步
- 用户的浏览器并没有保存cookie,只能给他看主页,等他点击”通过新浪微博登陆”的按钮进行登录,等他在新浪端登陆完了,回来之后的处理是由callback类进行处理的(就是上面所说的给新浪登陆页面提供的 redirect_uri 填的是’http://1.vcoool.sinaapp.com/callback’)
- 这种情况是用户的浏览器保存了cookie,按理说可以直接
raise web.seeother(\callback)
交给callback处理,因为callback是专门处理登陆后流程的类,但是这样的话会显示此网页包含重定向循环,我也不知道为啥..所以进行下列处理- 通过在cookie里面解码出来的access_token构建一个请求对象
- 调用新浪微博API请求用户所关注用户的最新50条微博
- 对API返回的json格式数据处理(因为返回的东西有很多,我们只需要有限的信息比如微博内容,图片,作者等..) 4 .使用已经保存到数据库的SVM函数(在callback中已经保存,因为这里浏览器都存了cookie,所以之前肯定已经登录过了)计算得到分类的权值,并进行排序
- 字符串处理,因为新浪API返回的是raw字符串,@,##,和链接都不会显示,这里进行正则替换,把他们转换成HTML超链接形式
- 把排好序的微博列表通过
render.list()
方法传入前端模板
callback对象的功能
callback对象是对用户第一次登陆VCool进行处理,就像上面说的,用户在新浪的登陆页面登陆结束后就会redirect到这个函数来处理,同时会用GET方法附带一个code参数,用于我们请求access_token
- 接收GET过来的code参数值,没有的话跳转到首页”/”
- 通过code向新浪请求参数access_token,expires_in,uid,分别是调用API时要用到的参数,过期时间,登录用户的新浪ID
- 根据上面得到的uid(新浪ID)查询一下数据库,如果已经有了相应的项的话就进行更新,如果没有的话就新建一个列表项
- 存cookie,把得到的access_token和expired_in等信息加密存一下cookie,以便下一次使用
- 后面的功能和3.2-3.6一样了
当前数据库:
1 2 3 4 5 6 7 8 |
|